package com.wtwd.campus.service;

import com.wtwd.campus.common.RespEntity;
import com.wtwd.campus.entity.*;
import com.wtwd.campus.wx.entity.BindingStudentDto;
import com.wtwd.campus.wx.entity.SchoolDto;

import java.util.List;
import java.util.Map;

/**
 * @Author ldaoliang
 * @Date create in 13:57 2021/7/14
 * @Description
 */
public interface WxService {

    /**
     * 校验或添加openId如果不存在
     *
     * @param openId
     * @return 数组：第一个元素表示是否需要绑定号码；第二个元素表示用户ID
     */
    int[] addOpenIdIfAbsent(String openId);

    /**
     * 根据号码查询微信用户
     *
     * @param phone
     * @return
     */
    WxUser getWxUserByPhone(String phone,Integer customerId);

    /**
     * 根据id获取微信用户
     *
     * @param userId
     * @return
     */
    WxUser getWxUserById(Integer userId);

    /**
     * 绑定号码
     *
     * @param wxUser
     * @param phone
     * @return
     */
    int[] bindPhone(WxUser wxUser, String phone, String token,Integer customerId);

    /**
     * 获取用户的绑定学生列表
     *
     * @param UserId
     * @return
     */
    List<Map<String, Object>> getUserStudentList(Integer UserId);

    /**
     * 绑定学生
     *
     * @param userId
     * @param imei
     * @param name
     * @param studetnNo
     * @return
     */
    RespEntity bindingStudent(Integer userId, String imei, String name, String studetnNo);

    /**
     * 解绑学生
     *
     * @param userId
     * @param studentId
     * @return
     */
    int unbindStudent(Integer userId, Integer studentId);

    /**
     * 获取学生列表（发送指令之前的列表）
     *
     * @param userId
     * @return
     */
    List<Map<String, Object>> getStudentList(Integer userId);

    /**
     * 解绑用户
     *
     * @param wxUserId
     * @return
     */
    int clearBind(Integer wxUserId);

    /**
     * 绑定学生的号码列表
     *
     * @param studentId
     * @return
     */
    List<Map<String, Object>> bindStudentPhoneList(Integer studentId);

    /**
     * 转让管理员
     *
     * @param userId         旧管理员用户id
     * @param transferUserId 新管理员用户id
     * @return
     */
    Integer changeManger(Integer stuId, Integer userId, Integer transferUserId);

    /**
     * 根据绑定id查询到绑定列表
     *
     * @param id
     * @return
     */
    Map<String, Object> getBindingById(Integer id);

    Integer changeAuthority(Integer id, Integer status);

    /**
     * 根据学生id和用户id查询一条绑定记录
     *
     * @param stuId
     * @return
     */
    Map<String, Object> getBindingByStuIdAndUserId(Integer stuId, Integer userId);

    /**
     * 根据学生id获取被授权的家长的openId
     *
     * @param stuId
     * @return
     */
    List<Map<String, Object>> getOpenIdByStuId(Integer stuId);

    /**
     * 根据用户id修改学生家长绑定列表中的电话号码
     *
     * @param userId
     * @param phone
     * @return
     */
    Integer modifyBindingPhoneByUserId(Integer userId, String phone);

    /**
     * 根据openId查询微信用户
     *
     * @param openId
     * @return
     */
    WxUser getWxUserByOpenId(String openId);

    List<String> getOpenIdListByClassId(Integer classId);

    List<Map<String, Object>> getOpenIdAndStuNameListByClassId(Integer classId);

    List<String> getOpenIdListBySchoolId(Integer schoolId);

    String getClassesMessByUserId(Integer userId);

    List<Map<String, Object>> getClassNameByClassIdList(List<Integer> idList);

    String getTeacherNameByUserId(Integer userId);

    /**
     * 根据openId获取微信用户ID
     *
     * @param openId
     * @return
     */
    Integer getWxUserIdByOpenId(String openId);

    /**
     * 根据微信用户ID获取学生信息列表
     *
     * @param wxUserId
     * @return
     */
    List<Map<String, Object>> getXMLYStudentList(Integer wxUserId);

    /**
     * 修改手机号码
     *
     * @param imei
     * @param phone
     * @return
     */
    int modifyPhoneByImei(String imei, String phone);

    /**
     * 修改手机号码
     *
     * @param deviceId
     * @param phone
     * @return
     */
    int modifyPhoneByDeviceId(Integer deviceId, String phone);

    Integer updateWxUserCustomerIdByWxUserId(Integer wxUserId, Integer customerId);

    /**
     * 处理微信客户开关状态为关的情况下客户数据
     *
     * @param wxCustomer
     * @param data
     * @return
     */
    Boolean dealOpenStateBasicInformation(WxCustomer wxCustomer, BindingStudentDto data);


    /**
     * 校验学校类信息
     * if(该客户下存在 相同学号 相同 名称的学生,则校验输入的学校类信息是否有误)
     */

    Boolean authSchoolKind(WxCustomer wxCustomer, BindingStudentDto data);

    /**
     * 创建学校
     * if 学校名称不存在则创建
     *
     * @param wxCustomer
     * @param schoolDto
     * @return
     */
    School createSchoolOneName(WxCustomer wxCustomer, SchoolDto schoolDto);

    /**
     * 创建年级
     * if
     * 在一个学校中 年级名称不存在则创建
     *
     * @param grade
     * @return
     */
    Grade createGradeOneName(Grade grade);

    /**
     * 创建年级
     * if
     * 年级名称不存在则创建
     *
     * @param classes
     * @return
     */
    Classes createClassesOneName(Classes classes);

    /**
     * 1.一个学校下学号不能相同
     * 2.如果一个学校下不存在该学号的学生则创建
     *
     * @param schoolId
     * @param student
     * @return
     */
    Student createStudentOneStuNo(Integer schoolId, Student student);


    /**
     * 初始化客户数据
     *
     * @param wxCustomer
     * @param data
     * @return
     */
    BindingStudentDto initDefaultCampusValue(WxCustomer wxCustomer, BindingStudentDto data);
}
